package com.uva.dbcs.gestionDeUsuarios.despliegue.impl;

import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import com.uva.dbcs.gestionDeUsuarios.dominio.Carnet;
import com.uva.dbcs.gestionDeUsuarios.despliegue.GestorDeUsuariosLocal;
import com.uva.dbcs.gestionDeUsuarios.dominio.Carnetcliente;
import com.uva.dbcs.gestionDeUsuarios.dominio.CarnetclientePK;
import com.uva.dbcs.gestionDeUsuarios.dominio.Cliente;
import com.uva.dbcs.gestionDeUsuarios.dominio.Empleado;
import com.uva.dbcs.gestionDeUsuarios.persistencia.CarnetClienteDAO;
import com.uva.dbcs.gestionDeUsuarios.persistencia.CarnetDAO;
import com.uva.dbcs.gestionDeUsuarios.persistencia.ClienteDAO;
import com.uva.dbcs.gestionDeUsuarios.persistencia.EmpleadoDAO;
//import com.uva.dbcs.utilidades.dominio.TipoCarnet;

/**
 * Session Bean implementation class GestorDeUsuarios
 */
@Stateless
public class GestorDeUsuarios implements GestorDeUsuariosLocal {

	@EJB
	ClienteDAO clienteDAO;
	@EJB
	CarnetDAO carnetDAO;
	@EJB
	CarnetClienteDAO carnetClienteDAO;
	@EJB
	EmpleadoDAO empleadoDAO;
    /**
     * Default constructor. 
     */
    public GestorDeUsuarios() {
    }

	@Override
	public List<Cliente> getClientes() {
		return clienteDAO.findAll();
	}

	@Override
	public Cliente getClienteById(int idCliente) {
		return clienteDAO.find(idCliente);
	}

	@Override
	public List<Cliente> buscarUsuario(String nombre, String contrasena) {
				
		return clienteDAO.findUser(nombre, contrasena);
	}

	@Override
	public List<Carnetcliente> getCarnetCliente() {
		return carnetClienteDAO.findAll();
	}

	@Override
	public List<Empleado> buscarEmpleado(String nombre, String contrasena) {
		return empleadoDAO.findUser(nombre, contrasena);
	}

	// Diego: el carnet y el cliente lo vamos a hacer en dos pasos.
	// Una operación para crear el cliente y otra para añadir a el cliente
	// los carnets necesarios...
	
	
	// La vista tendrá como dos partes.. una para crear el usuario y otra para
	// crear los carnets una debajo de otra.
	
	@Override
	public void crearCliente(boolean bloqueado, int codigoPostal,
			String direccionPostal, String email, String nif, String nombre,
			String password) {
				
		
		Cliente C= new Cliente(bloqueado,codigoPostal,
				direccionPostal, email, nif,  nombre,
				 password);
		
		clienteDAO.create(C);
		
		
	}

	@Override
	public void addCarnetACliente(int idCliente, Carnet nombreCarnet,
			Date fechaRenovacion) {
		
		Cliente cliente = clienteDAO.find(idCliente);
		
		
		//Buscar el carnet que se corresponda con el indicado.
		
		// Obtener el cliente
		
		// Crear carnet y añadirlo
		
		Carnet carnet = carnetDAO.findByName(nombreCarnet.toString());
		
		
		//creacion del carnetcliente
		CarnetclientePK pk= new CarnetclientePK();
		pk.setIdCarnet(carnet.getIdCarnet());
		
		Carnetcliente cc= new Carnetcliente();
		cc.setId(pk);
		cc.setFechaRenovacion(fechaRenovacion);
		cc.setCliente(cliente);
		cc.setCarnet(carnet);
		
		carnetClienteDAO.create(cc);
		
		
		
	}


	@Override
	public Cliente getClienteByDni(String dni) {
		
		return clienteDAO.findClienteByDni(dni);
	}

	@Override
	public void actualizarBloqueoCliente(int idCliente, boolean estado) {
		Cliente c= clienteDAO.find(idCliente);
		c.setBloqueado(estado);
	}

}
